隐私计算|TEE会是必经之路吗?可信执行环境深入浅出
The following article is from 郭嘉日记 Author 百晓生
以下文章来源于郭嘉日记 ,作者百晓生
前言:上篇《一文详解什么是隐私计算和可信计算、机密计算》我们厘清了隐私计算的概念,本文从隐私计算的技术路线,主要谈清楚TEE的现状和未来。
可信执行环境,英文简称为TEE (Trusted Execute Environment)。根据“可信”的定义,可信执行环境指的是满足如下条件的程序执行平台:这个平台里的软硬件资源永远按照预期的方式工作,不会受平台控制者或者其它任何第三方的影响,这些资源包括了寄存器、内存、中断等。因为这些基本资源永远按照设计者预期工作,从而确保了在里面运行的程序行为的可控。
目前TEE环境总体分为私密性和非私密性:
1)私密性的TEE,比如SGX,不仅能抗运行时攻击,也能抗物理攻击,任何离开寄存器的数据都会被自动、强制加密;
2)非私密性的TEE,比如TrustZone,其依赖特权级的控制实现运行时保护(低优先级程序不能访问高优先级程序的资源),但是其内存不做任何加解密控制,可以被多种物理方式攻击。
软硬结合的TEE,前面说的都是纯硬件实现的TEE,其实也还有软硬结合的方案,比如用FPGA加速的同态算法,也能实现TEE环境。只不过这个方案会涉及到硬件编程、编译器、库环境、生态等诸多因素限制,链条比较长; 优势在于完全自主可控,对于一些高度政治敏感的场景有优势。
基于隐私计算的场景诉求,非私密TEE,比如TrustZone,是不可用的。目前可用的私密性TEE主要是 intel的SGX以及国产的海光SEV等产品,尤其以intel的SGX为业界主流,安全性、性能都优于其它方案。
目前,隐私计算的主流实现方式包含2个方向:
1)多方安全计算(Secure Multi-party Computation,MPC)。
主要分为基于分片原理的多方安全计算和基于同态加密的多方安全计算。
① 基于分片原理的多方安全计算
基于分片原理(如秘密分享)的多方安全计算是一种纯算法层面的实现。
优点:在于自主可控。除了算法实现本身,不依赖任何第三方。
缺点:在于参与方之间通信量过大,一些复杂需求的通信量甚至超出通常的机房带宽能力;且参与方越多,算法实现越复杂,工程实现层面有很大困难。
② 基于同态加密的多方安全计算
依据的是数学上的同态性原理,即对加密数据所做的运算等价于对明文所做的运算。
优点:同样是自主可控。
缺点:在于目前已知的所有同态算法都有很高的计算复杂度,在现有计算机设备的计算能力范围内,其可用性难以解决。
2)可信执行环境(Trusted Execution Environment,TEE)。
目前市场上应用成熟度相对较高的是Intel的SGX和Arm的Trustzone,FPGA加速的同态加密方案尚处于探索阶段,还没有成熟产品可用。基于前面说过的理由,TrustZone在隐私计算环境是不可用的。
TEE优势:在于性能强大,能够解决复杂场景的业务诉求;同时开发成本低,能够迅速做出满足业务诉求的产品。
TEE缺点:在于硬件依赖导致某些场景无法适用;且芯片能力目前是我国的行业短板,在某些高度政治敏感的场景,SGX等产品是不可用的。
拿SGX为例,展开做个对比分析:
SGX的优势:
全加密,任何离开CPU寄存器的数据都会被自动、强制加密,CPU缓存以及物理内
存内的数据都不例外。
不同 Enclave实例之间实现硬件隔离,不会相互影响。
多线程运行,可以充分发挥CPU的计算能力。
无需TEE OS,避免对OS依赖。
TEE和REE相互之间可主动向对方发起接口调用,全双工工作。
TEE和REE相互之间的调用由CPU硬件指令实现,无需依赖第三方模块。
TEE资源隶属于REE进程资源的一部分,遵循操作系统的进线程调度逻辑,可避免TEE抢占 CPU导致整体系统异常。
远程证明有CPU硬件支持,安全性高
SGX的劣势:
运行时会独占部分物理内存。
基于SGX架构,TEE内无法直接提供任何硬件IO的能力。
远程证明依赖Intel的证明服务,会有一定局限。
任何TEE程序要加载运行起来,需要Intel颁发的数字证书,有厂商依赖
虽然TEE是趋势,但并不说明其它实现方式会退出隐私计算历史,他们更多会是相互协作的关系:
部分环境无法支持TEE硬件,比如WEB环境,此时只能使用MPC等纯软方案。
政府、军队等领域,考虑政治和国家安全因素,无法信任国外厂商的TEE产品;即使国产的海光等产品,其 指令集依然来自国外公司的授权。
SGX等TEE产品无法直接支持IO操作,某些特殊场景不能满足业务诉求。
事实上,联邦学习严格意义上不太应该划分为隐私计算的一种实现方式。本质上,联邦学习是综合应用了以上两个方案、同时结合AI实现的一种基于机器学习的大数据分析技术。联邦学习在性质上与上面二者是不一样的。
隐私计算产品的形态
1)软硬件一体机
软硬件一体机目前主要是基于Intel sgx做整合,在系统里预置sgx开发和运行环境,以及隐私计算常用的各种软件,宣传的优势是“开箱即用”。除此之外,可能还会基于可信启动的要求,增加可信启动相关逻 辑,确保服务器环境的可信度。硬件一体机最后交付的是客户从厂商新买的服务器硬件,俗称“盒子”。
2)“一键”一体机
“一键”一体机的做法是基于目前几乎所有服务器都具备sgx能力这个事实(只不过以前没把它用起来), 直接在已有服务器部署sgx开发和运行环境,无需额外购买和部署任何专用硬件。“一键”一体机最后交付的是纯软件产品。
两者对比:
前者需要额外购买新的服务器设备,以及将这些设备部署到生产环境;后者只需要在现有服务器环境 运行程序,无需额外适配生产环境。
安全性上二者没有本质差异:核心逻辑都是运行在TEE内部,外部环境无法干涉TEE内的逻辑和数据。
编程范式上:前者需要按照一体机提供的SDK环境的要求写代码;后者没有特殊编程要求,开发者可 以选择任何自己熟悉的方式编写TEE程序。
值得注意的一点是,虽然部分硬件一体机额外增加了可信启动的逻辑,但是这并没有额外增加TEE的安全性:TEE的安全性只依赖CPU本身以及TEE程序的编写,外部环境不能让它更安全或者更不安全。因此,不能因为是隐私计算一体机就降低对TEE程序的安全性要求。
os的功能是管理软硬件资源。在arm的trustzone架构里,tee里面的内存、各种软硬件资源等都需要tee内的软件自行调度和使用。且因为特权级的原因,tee若出了问题,会导致整个操作系统出现故障。所以对于arm下的trustzone来说,tee os是必须的。
sgx不一样的地方在于,其并不接管任何软硬件资源。这些资源本质上依然受操作系统管理,比如进线程切换、内存分页机制与缺页管理等等,因此并不需要有os做任何事。且即使tee程序出现问题,也对操作系统不产生任何负面影响。
现在行业里针对一体机所说的“tee os”多数时候就是对常用程序操作包装成了一个编程库,比如文件、网络、线程等等操作做了包装(类似于libos),或者在使用形式上模拟了linux的方式(类似于uml)。这种设计一是降低了CPU本就不够用的性能,二是增加了TCB,可能引入更多复杂的安全问题(比如各种ocall引入更多不可信因素),是得不偿失的。本质上,这种“便利性”的库,只是另一个版本的SDK,与os本身没有任何关系。
小结,如果国产芯片发展再快一些、产品再成熟一些,你觉得TEE会大面积普及吗?